2014/07/30

Recent entries from same category

  1. Go 言語プログラミングエッセンスという本を書きました。
  2. errors.Join が入った。
  3. unsafe.StringData、unsafe.String、unsafe.SliceData が入った。
  4. Re: Go言語で画像ファイルか確認してみる
  5. net/url に JoinPath が入った。

golang には logger が星の数ほどあるのですが

go言語におけるロギングについて — さにあらず

コマンドラインオプションについて 分かり辛いので、僕の分かった事だけをメモしておきます。 ログの出力処理は glog.go#output を読めば大体分かります。 -logtostderr これを指定...

http://blog.satotaichi.info/logging-frameworks-for-go

その殆どがエスケープシーケンスを使って色を出しており、Windows で動かすと残念な表示になる物ばかりでした。

まさかログに色を付けたいという理由だけで ansicon を使うのは悲し過ぎるし、そもそも「ansicon 使ったら負けだと思ってる」ので、go-colorable というライブラリを書きました。

golang の logger はその殆どが標準パッケージの log を参考にしており、おおよそ SetOutput という、出力先を変えられる関数が用意されています。そこで、それを横取りして Windows でも色を出せる様にしました。

mattn/go-colorable - GitHub
https://github.com/mattn/go-colorable

これを使うと今まで

bad

こんな表示だったのが

good

この様にカラフルな表示になります。使い方はとても簡単で

package main

import (
    "github.com/mattn/go-colorable"
    "github.com/Sirupsen/logrus"
)

func main() {
    logrus.SetOutput(colorable.NewColorableStdout())

    logrus.Info("succeeded")
    logrus.Warn("not correct")
    logrus.Error("something error")
    logrus.Fatal("panic")
}

この様に NewColorableStdout を呼び出して io.Writer を取得し、それを logger 等に渡すだけです。Windows 以外の場合は os.Stdout を返す様になっているのでいちいち Windows かどうか判定する必要もありません。

UNIX で色を標準出力するライブラリ書いたけど、Windows... 知らねぇよ!って人は、ぜひこのライブラリを使ってみて下さい。きっと pull-request を貰うまでもなく、Windows 対応が完了している事になるはずです。

Posted at by